package edu.eam.gruposenior.gestorLEcciones.entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * The persistent class for the leccion_aprendida database table.
 * 
 */
@Entity
@Table(name = "leccion_aprendida")
@NamedQueries({
		@NamedQuery(name = LeccionAprendida.FIND_ALL, query = "select l from LeccionAprendida l"),
		@NamedQuery(name = LeccionAprendida.FIND_LECCION_APRENDIDA_BY_CATEGORIA, query = "select l from LeccionAprendida l where l.categoriaSubcategoria.id=:"
				+ LeccionAprendida.PARAMETRO_CATEGORIA),
		@NamedQuery(name = LeccionAprendida.FIND_LECCION_APRENDIDA_BY_LECCION_PADRE, query = "select l from LeccionAprendida l where l.leccionPadre.id=:"
				+ LeccionAprendida.PARAMETRO_LECCION_PADRE) })
public class LeccionAprendida implements Serializable {

	/**
	 * Constante para la named Query de buscar todos las Lecciones Aprendidas.
	 */
	public static final String FIND_ALL = "LeccionAprendida.findAll";

	/**
	 * Constante para la named Query de buscar todos las Lecciones Aprendidas.
	 */
	public static final String FIND_LECCION_APRENDIDA_BY_CATEGORIA = "LeccionAprendida.findLeccionAprendidaByCategoria";

	/**
	 * Constante para la named Query de buscar todos las Lecciones Aprendidas.
	 */
	public static final String PARAMETRO_CATEGORIA = "idCategoria";

	/**
	 * Constante para la named Query de buscar todos las Lecciones Aprendidas.
	 */
	public static final String FIND_LECCION_APRENDIDA_BY_LECCION_PADRE = "LeccionAprendida.findLeccionAprendidaByLeccionPadre";

	/**
	 * Constante para la named Query de buscar todos las Lecciones Aprendidas.
	 */
	public static final String PARAMETRO_LECCION_PADRE = "idLeccionPadre";

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@Lob()
	private String descripcion;

	@Temporal(TemporalType.DATE)
	private Date fecha;

	private int iteracion;

	private String nombre;

	@ManyToOne
	@JoinColumn(name = "padre")
	private LeccionAprendida leccionPadre;

	@OneToMany(mappedBy = "leccionPadre", fetch = FetchType.EAGER)
	private List<LeccionAprendida> lecciones;

	@Lob()
	@Column(name = "pasos_solucion")
	private String pasosSolucion;

	@Lob()
	private String referencias;

	@Lob()
	private String solucion;

	// bi-directional many-to-one association to CategoriaSubcategoria
	@ManyToOne
	@JoinColumn(name = "categoria")
	private CategoriaSubcategoria categoriaSubcategoria;

	// bi-directional many-to-one association to Proyecto
	@ManyToOne
	@JoinColumn(name = "proyecto")
	private Proyecto proyectoBean;

	// bi-directional many-to-one association to Usuario
	@ManyToOne
	@JoinColumn(name = "reportador")
	private Usuario usuario;

	public LeccionAprendida() {
	}

	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Date getFecha() {
		return this.fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public int getIteracion() {
		return this.iteracion;
	}

	public void setIteracion(int iteracion) {
		this.iteracion = iteracion;
	}

	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getPasosSolucion() {
		return this.pasosSolucion;
	}

	public void setPasosSolucion(String pasosSolucion) {
		this.pasosSolucion = pasosSolucion;
	}

	public String getReferencias() {
		return this.referencias;
	}

	public void setReferencias(String referencias) {
		this.referencias = referencias;
	}

	public String getSolucion() {
		return this.solucion;
	}

	public void setSolucion(String solucion) {
		this.solucion = solucion;
	}

	public CategoriaSubcategoria getCategoriaSubcategoria() {
		return this.categoriaSubcategoria;
	}

	public void setCategoriaSubcategoria(
			CategoriaSubcategoria categoriaSubcategoria) {
		this.categoriaSubcategoria = categoriaSubcategoria;
	}

	public Proyecto getProyectoBean() {
		return this.proyectoBean;
	}

	public void setProyectoBean(Proyecto proyectoBean) {
		this.proyectoBean = proyectoBean;
	}

	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * @return the leccionPadre
	 */
	public LeccionAprendida getLeccionPadre() {
		return leccionPadre;
	}

	/**
	 * @param leccionPadre
	 *            the leccionPadre to set
	 */
	public void setLeccionPadre(LeccionAprendida leccionPadre) {
		this.leccionPadre = leccionPadre;
	}

	/**
	 * @return the lecciones
	 */
	public List<LeccionAprendida> getLecciones() {
		return lecciones;
	}

	/**
	 * @param lecciones
	 *            the lecciones to set
	 */
	public void setLecciones(List<LeccionAprendida> lecciones) {
		this.lecciones = lecciones;
	}

	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

}